<?php

class ctl_editor extends adminPage
{

    function link()
    {
        $sitemap = &$this->system->loadModel('content/sitemap');
        $this->pagedata['linked'] = $sitemap->getLinkNode();
        foreach ($this->pagedata['linked']['page'] as $k => $p) {
            $pos = strpos($p['action'], ':');
            $ident = substr($p['action'], $pos + 1);
            $this->pagedata['linked']['page'][$k]['url'] = $this->system->realUrl('page', $ident, null, 'html', $this->system->base_url());
        }

        if ($_POST['goods']) {
            $mod = &$this->system->loadModel('goods/products');
            $rows = $mod->getList('name', array('goods_id' => $_POST['goods']));
            $this->pagedata['goodsInfo'] = $rows[0]['name'] . '<input type="hidden" name="goods" value="' . $_POST['goods'] . '" />';
        }
        if ($_POST['article']) {
            $mod = &$this->system->loadModel('content/article');
            $rows = $mod->getList('title', array('article_id' => $_POST['article']));
            $this->pagedata['articleInfo'] = $rows[0]['title'] . '<input type="hidden" name="article" value="' . $_POST['article'] . '" />';
        }

        $this->display('editor/dlg_lnk.html');
    }

    function find($type, $keywords)
    {
        if (!$keywords) {
            echo __('请输入关键字。');
            return;
        }
        if ($type == 'goods') {
            $mod = &$this->system->loadModel('goods/products');
            foreach ($mod->getList('goods_id,name', array('name' => $keywords)) as $k => $r) {
                $list[] = array(
                    'url' => $this->system->realUrl('product', 'index', array($r['goods_id']), 'html', $this->system->base_url())
                , 'label' => $r['name']);
            }
            $this->pagedata['list'] = $list;
        } elseif ($type == 'article') {
            $mod = &$this->system->loadModel('content/article');
            foreach ($mod->getList('article_id,title', array('keywords' => $keywords)) as $k => $r) {
                $list[] = array(
                    'url' => $this->system->realUrl('article', 'index', array($r['article_id']), 'html', $this->system->base_url()),
                    'label' => $r['title']);
            }
            $this->pagedata['list'] = $list;
        }
        if (count($list) > 0) {
            $this->pagedata['type'] = $type;
            $this->display('editor/dlg_result.html');
        } else {
            echo __('没有符合条件<b>"') . $keywords . __('"</b>的记录。');
        }
    }

    function table()
    {
        $this->display('editor/dlg_table.html');
    }

    function image($showpicset = 1)
    {
        $tag = &$this->system->loadModel('system/tag');
        $this->pagedata['show_picset'] = $showpicset;
        $this->pagedata['imgtags'] = $tag->tagList('image');
        header("Cache-Control:no-store, no-cache, must-revalidate"); //强制刷新IE缓存
        $this->display('editor/dlg_image.html');
    }

    function flash()
    {
        $tag = &$this->system->loadModel('system/tag');
        $this->pagedata['imgtags'] = $tag->tagList('image');
        $this->display('editor/dlg_flash.html');
    }

    function uploader()
    {
        $storager = &$this->system->loadModel('system/storager');
        set_error_handler(array(&$this, '_eH')); //如果上传图片时遇到trigger_error或者意外错误，执行_eH
        header('Content-Type: text/html; charset=utf-8');
        if ($s = $storager->save_upload($_FILES['file'], '', '', $msg)) {
            restore_error_handler();
            $pubFile = &$this->system->loadModel('system/pubfile');
            $pubFile->insert(array(
                'file_name' => $_FILES['file']['name'],
                'file_ident' => $s,
                'cdate' => time(),
                'memo' => $_POST['memo'],
                'tags' => space_split($_POST['tags']),
                'file_type' => $_POST['file_type']
            ));
            $info = array('url' => $storager->getUrl($s), 'ident' => $s);
            echo '<script>window.top.uploadCallback(' . json_encode($info) . ')</script>';
        } else {
            restore_error_handler();
            echo '<script>window.top.uploadCallback("' . ($msg ? $msg : __('上传失败')) . '")</script>';
        }
    }

    function _eH($errno, $errstr, $errfile, $errline)
    {
        restore_error_handler();
        echo '<script>window.top.uploadCallback(false)</script>';
    }

    function gallery($tag = 0, $page = 1, $file_type = 0)
    {
        $pubFile = &$this->system->loadModel('system/pubfile');
        $p = 18;

        $result = $pubFile->getList(null, $filter = array('tag' => $tag, 'file_type' => $file_type), $p * ($page - 1), $p);
        $c = $pubFile->count($filter);
        foreach ($result as $k => $v) {
            if (preg_match('/\.swf/', $v['file_name'])) {
                unset($result[$k]);
            }
        }
        $this->pagedata['images'] = $result;

        $this->pagedata['pager'] = array(
            'current' => $page,
            'total' => floor($c / $p) + 1,
            'link' => 'javascript:showResLib(\'' . $tag . '\',orz)',
            'token' => 'orz'
        );

        $this->display('editor/gallery_img.html');
    }

    function gallery_SWF($tag = 0, $page = 1, $file_type = 0)
    {
        //todo count
        $pubFile = &$this->system->loadModel('system/pubfile');
        $p = 18;
        $result = $pubFile->getList(null, array('tag' => $tag, 'file_type' => $file_type), $p * ($page - 1), $p);
        foreach ($result as $k => $v) {
            if (!preg_match('/\.swf/', $v['file_name'])) {
                unset($result[$k]);
            }

        }
        $c = count($result);
        $this->pagedata['swfs'] = &$result;
        $this->pagedata['pager'] = array(
            'current' => $page,
            'total' => floor($c / $p) + 1,
            'link' => 'javascript:showResLib(\'' . $tag . '\',orz)',
            'token' => 'orz'
        );

        $this->display('editor/gallery_swf.html');
    }


    function editHTML()
    {
        $this->display('dlg_mce.html');
    }

    function findobj()
    {
        $o = &$this->system->loadModel($_GET['mdl']);
        $key = $_GET['key'] ? $_GET['key'] : $o->idColumn;

        $output = '';
        $filter = array();

        foreach ($o->getList($key . ' as id,' . $o->textColumn, $filter, 0, 15) as $row) {
            $output .= '<div val="' . htmlspecialchars($row['id']) . '">' . $row[$o->textColumn] . '</div>';
        }
        echo $output;
    }

    function object_rows()
    {
        if ($_POST['data']) {
            $obj = &$this->system->loadModel($_POST['object']);
            $this->pagedata['_input'] = array('items' => $obj->getList($obj->idColumn . ',' . $_POST['cols'], array($obj->idColumn => $_POST['data'])),
                'idcol' => $obj->idColumn,
                'keycol' => ($_POST['key'] ? $_POST['key'] : $obj->idColumn),
                'textcol' => $obj->textColumn,
                'name' => $_POST['iptname'],
                'view' => $_POST['view']);
            $this->display('finder/input-row.html');
        }
    }

    function _filter()
    {
        $obj = $this->system->loadModel($_GET['object']);// trading/order 
        $from = 'from';
        $data = &$obj->getColumns(null, $from);
        $filter_items = array();
        include("datatypes.php");
        foreach ($data as $k => $v) {
            if ($v['filtertype']) {
                $data[$k]['searchparams'] = $datatypes[$v['filtertype']]['searchparams'];
                if ($v['filtertype'] == 'normal') {
                    $data[$k]['searchparams'] = $datatypes['email']['searchparams'];
                }
                if (is_array($v['type'])) {
                    $data[$k]['options'] = $v['type'];
                    $data[$k]['type'] = 'select';
                }
                if ($v['filtertype'] == 'custom') {
                    $data[$k]['searchparams'] = $v['filtercustom'];
                }
                $filter_items[$k] = $data[$k];
            }

        }
        $has_tag = array('goods/products' => 'goods', 'trading/order' => 'order', 'member/member' => 'member');
        if (isset($has_tag[$_GET['object']])) {
            $tag = $this->system->loadModel('system/tag');
            $tag_data = $tag->tagList($has_tag[$_GET['object']]);
            foreach ($tag_data as $t_key => $t_value) {
                $option[$t_value['tag_name']] = $t_value['tag_name'];
            }
            $filter_items['tag']['label'] = '标签';
            $filter_items['tag']['type'] = 'select';
            $filter_items['tag']['options'] = $option;
            $filter_items['tag']['filtertype'] = 'yes';
        }

        $this->pagedata['data'] = $filter_items;
    }

    function lista()
    {

        $_filter = unserialize($_GET['filter']);

        foreach ($_POST as $k => $v) {

            if (($k{0} != '_' && $v) || $v === false) {

                if ($_POST['_' . $k . '_search']) {
                    $filter['_' . $k . '_search'] = $_POST['_' . $k . '_search'];
                }

                $filter[$k] = $v;
            }
            if (isset($_POST['sex']) && ($_POST['sex'] == '0')) {
                $filter['sex'] = 0;
            }
        }
        //exit;
        if (isset($_POST['marketable'])) {
            $filter['marketable'] = ($_POST['marketable'] == "") ? "false" : "true";
            $filter['_marketable_search'] = 'tequal';
        }

        $filter = array_merge((array)$filter, (array)$_filter);
        $this->_select_obj($filter);
        $this->display('editor/object_items.html');
    }

    function selectobj()
    {
        $filter = $_GET['filter'];
        $_GET['obj_id'] = substr(md5($_GET['object']), 0, 6);
        $this->_select_obj($filter);
        if ($this->pagedata['data']) {
            $this->pagedata['filter'] = true;
        }
        $this->display('editor/object_selector.html');
    }

    function _select_obj($filter)
    {
        if (!isset($filter['marketable'])) {
            $filter['marketable'] = "true";
        }
        $o = &$this->system->loadModel($_GET['object']);//  trading/package
        $limit = 10;
        if (!$_GET['page']) {
            $_GET['page'] = 1;
        }
        $start = ($_GET['page'] - 1) * $limit;
        $this->pagedata['data'] = &$o->getColumns();
        if ($_COOKIE['LOCALGOODS']) {
            $this->pagedata['items'] = $o->getBindList($start, $limit, $count, $filter);
        } else {
            $this->pagedata['items'] = $o->getList($o->idColumn . ',' . $o->textColumn, $filter, $start, $limit);
            $count = $o->count($filter);
        }

        $this->pagedata['textColumn'] = $o->textColumn;
        $this->pagedata['idColumn'] = $o->idColumn;
        $this->pagedata['ipt_type'] = $_GET['select'] == 'checkbox' ? 'checkbox' : 'radio';

        $this->pagedata['pager'] = array(
            'current' => $_GET['page'],
            'total' => ceil($count / $limit),


            'link' => 'javascript:update_' . $_GET['obj_id'] . '(_PPP_)',
            'token' => '_PPP_'
        );

        $this->_filter();
    }

    function filter()
    {
        $this->_filter();
        $this->display('finder/filter_show.html');
    }
}
